package com.ww.springboot.boot.algorithm.leetcode1;

import java.util.ArrayList;
import java.util.List;

/**
 * 描述：
 *
 * @author 🧑 ‍wanwei
 * @since 2022-03-11 14:15
 */
public class AL57插入区间 {
    public static void main(String[] args) {
        int[][] arrays = {{1, 5}};
        int[] newInterval = {6, 8};
        arrays = insert(arrays, newInterval);
        PrintUtil.print(arrays);

    }

    public static int[][] insert(int[][] intervals, int[] newInterval) {
        if (intervals.length == 0 || intervals[0].length == 0) {
            int[][] intervalsNew = {newInterval};
            return intervalsNew;
        }
        List<int[]> list = new ArrayList<>();
        Boolean flag = true;
        for (int i = 0; i < intervals.length; i++) {
            if (!flag) {
                list.add(intervals[i]);
                continue;
            }
            //如果右节点小于左节点 则说明此区间不与其重合
            if (newInterval[0] > intervals[i][1]) {
                //说明在区间右边 需要继续往后比
                list.add(intervals[i]);
            } else if (newInterval[1] < intervals[i][0]) {
                //说明在区间左边 不需要再比了
                list.add(newInterval);
                list.add(intervals[i]);
                flag = false;
            } else {
                int min = Math.min(newInterval[0], intervals[i][0]);
                int max = Math.max(newInterval[1], intervals[i][1]);
                newInterval[0] = min;
                newInterval[1] = max;
            }
            //下面四种全是有交集的 将最终交集求出来 并赋值给newInterval继续往后比即可
           /* } else if (newInterval[0] <= intervals[i][0] && newInterval[1] >= intervals[i][1]) {
                //如果全覆盖 不变 继续比
            } else if (newInterval[0] >= intervals[i][0] && newInterval[1] <= intervals[i][1]) {
                //如果被全覆盖 不用继续比
                list.add(intervals[i]);
                flag = false;
            } else if (newInterval[1] >= intervals[i][0] && newInterval[1] <= intervals[i][1]) {
                //如果 右覆盖 则合并数组 不用再比
                intervals[i][0] = newInterval[0];
                list.add(intervals[i]);
                flag = false;
            } else if (newInterval[0] >= intervals[i][0] && newInterval[0] <= intervals[i][1]) {
                //如果左覆盖 则将newInterval左节点赋值为目标左节点值 继续比
                newInterval[0] = intervals[i][0];

            }*/
        }
        //如果flag=true 则说明 区间还未被合并 依旧有效
        if (flag) {
            list.add(newInterval);
        }
        return list.toArray(new int[list.size()][]);
    }
}
